#ifndef _PARAMETER_H_
#define _PARAMETER_H_

#include "stdint.h"
// #include "flash_divide.h"

#define PARAM_USE_INS_FLASH     1   //参数储存到内部 Flash
#define PARAM_USE_Ex_FLASH      0   //参数储存到外部 Flash
#define PARAM_USE_Ex_EEPROM     0   //参数储存到外部 EEPROM

//! 当前固件版本号，每次更新都必须修改
#define SOFTWARE_VERSION                    "V0.2.001"
#define PROJECT_NAME                        "NetModule"                             // （暂时没有）不要轻易改这个，boot层以这个判断升级包是否正确

//设备基础参数
typedef struct device_parameter_struct
{
    uint8_t  device_id[16];                 // 设备ID
    uint8_t  firmware_name[32];             // 固件名称
    uint8_t  firmware_boot_ver[16];         // 固件boot版本
    uint8_t  firmware_app_ver[16];          // 固件app版本
    uint8_t  sim_iccid[21];                 //sim卡iccid
    uint16_t device_time[6];                //设备时间
    uint16_t update_version;                //待升级固件版本号
    uint16_t update_package;                //待升级固件包数量
    uint16_t update_try_times;              //升级尝试次数
}device_parameter_t;

//服务器相关的参数
typedef struct server_parameter_struct
{
    uint8_t server_ipv4[16];                //目标服务器ip
    uint8_t server_port[8];                 //目标服务器端口
    uint32_t server_gateway_id;             //服务器分配的路由id（基于采发终端的接口
    uint32_t server_node_id;                //服务器分配的传感器节点id（基于采发终端的接口
}server_parameter_t;

//杀虫灯离线工作模式参数
typedef struct dis_parameter_struct
{
    uint16_t control_mode;                  //杀虫灯时控光控模式
    uint16_t run_time;                      //开始运行时间/运行时长
    uint16_t end_time;                      //停止运行时间
}dis_parameter_t;

//* 运行参数表
typedef struct parameter_struct
{
    device_parameter_t device_param;        //设备基础
    server_parameter_t server_param;        //服务器
    dis_parameter_t dis_param;              //杀虫灯参数
}parameter_t;

//参数储存到ROM的偏移量
enum parameter_save_offset
{
    //! 参数储存到ROM的偏移量，必须32bit对齐，即最小地址步进为4的倍数
    //! 远程升级不会覆盖参数储存区，请谨慎分配与修改，后续更新不允许更改已分配的地址
    //固件升级参数
    up_version_offset   = 0,
    up_package_offset   = 4,
    up_try_times_offset = 8,
    // //杀虫灯工作参数
    // dis_control_mode    = 40,
    // dis_run_time        = 42,
    // dis_end_time        = 44,
};

//运行调用参数记录
extern parameter_t system_param;

void Common_Param_Update_Form_Rom(void);
uint8_t Common_Param_Save_To_Rom(void);
uint8_t Common_Param_Read_From_Rom(void);
void Common_Param_Setting_Server_Ipv4(uint8_t *ip, uint8_t *port);
void Common_Param_Update_Form_Device(void);
void Hoire_Get_Firmware_Version(void);
void Hoire_Id_Generate_Hash(uint8_t *id_string);
uint8_t Common_Param_Is_Ipv4(uint8_t *ip);
void Common_Param_Random_Uuid(uint8_t *buf);

#endif
